Bask

Shanghai Based Android Engineer currently develop Payment systems at Ctrip

👨‍🔧‍

Flutter-Android开发者文档 -项目结构及资源

By Bask on null

This post is over a year old. Some of the content may be out of date.

喜欢我的小伙伴,一定要关注我的微信公众号啊!!!谢谢啦 AllAboutCoding AllAboutCoding

此文章为翻译Flutter官网的Flutter for Android Developers - Project structure & resources有兴趣的小伙伴可以移步官网查看。

在哪存放分辨率相关的图片文件?

在Android中把resources和assets作为不同的类目,Flutter App只有assets。所有的资源文件都放在Android的res/drawable-*目录下,对于Flutter来说都在assets文件夹下。 Flutter像iOS一样基于简单的密度格式( a simple density-based format)。资源可能是1.0x,2.0x,3.0x或是其他倍数。Flutter没有dp但是有逻辑像素,基本等同于与设备无关的像素。所谓的设备像素比是物理像素与逻辑像素的比。 与Android等价的密度表是: Android分辨率Flutter像素比: ldpi 0.75x mdpi 1.0x hdpi 1.5x xhdpi 2.0x xxhdpi 3.0x xxxhdpi 4.0x Flutter的资源文件夹可以放在任何地方--Flutter中没有预定义文件夹结构。在pubspec.yaml文件中声明资源(asserts)文件夹的位置,然后Flutter打包时就会加进去。 注意Flutter 1.0 Beta2之前,在Flutter中asserts定义在Native端无法访问的地方,反之亦然,Native的asserts和resources对Flutter也是无效的。因为他们是在不同的文件夹中。 从Flutter Beta2开始,assets存放在Native asset 文件夹中,在Native端用Android的AssertManager就可以访问了。

val flutterAssetStream = assetManager.open("flutter_assets/assets/my_flutter_asset.png")

在Flutter Beta2中,Flutter还是不能访问Native resources和assets。 例如,给我们的Flutter项目中添加一个新的图片资源文件叫my_icon.png,然后决定它应该放在我们任意命名的** images文件夹中,你需要把基本图片(1.0x)放在 images**文件夹中,所有其他倍率的放在自己适当倍率命名的文件夹下。

images/my_icon.png       // Base: 1.0x image
images/2.0x/my_icon.png  // 2.0x image
images/3.0x/my_icon.png  // 3.0x image

接下来,你需要在pubspec.yaml文件中声明这些images。

assets:
 - images/my_icon.jpeg

你可以使用** AssetImage**访问你的图片:

return new AssetImage("images/a_dot_burr.jpeg");

或者直接在Image Widget中访问:


Widget build(BuildContext context) {
  return new Image.asset("images/my_image.png");
}

如何保存String?如何处理本地化?

Flutter现在没有专用的资源,例如String系统。现阶段,最好的方式就是将你所有的文字都保存在一个静态类中,然后在那里访问他们,例如:

class Strings {
  static String welcomeMessage = "Welcome To Flutter";
}

然后在代码中你可以这么访问他们:

new Text(Strings.welcomeMessage)

Flutter有对Android的基本支持,尽管这个功能还在开发中。 Flutter建议开发者使用intl package来做国际化或本地化。

Flutter中的Gradle文件是什么?如何添加依赖?

在Android中添加依赖通过添加Gradle编译脚本。Flutter用Dart自己的编译系统和Pub包管理器。这个工具将原生的Android和iOS封装App委托给他们各自的编译系统。 在你的Flutter项目中,当Android文件夹下有Gradle文件,只有添加在每个平台集成所需的Native依赖才使用这些方法。通常情况下在Flutter中使用pubspec.yaml声明外部依赖来使用。Pub是一个查找Flutter package的好地方。